【问题标题】:ConfigurableBootstrapper error when Posting using Nancy.Testing.Browser使用 Nancy.Testing.Browser 发布时发生 ConfigurableBootstrapper 错误
【发布时间】:2013-03-29 12:41:03
【问题描述】:

我有一个声明了 Post 的简单 NancyModule:

Post["/Car/New"] = args => 
{
    Car newCar = this.Bind<Car>();
    newCar = _carRepos.CreateNewCar(newCar);
    return Response.AsJson<Car>(newCar);
};

从一个视图发布到这里工作正常:

<form action="/Car/New" method="post">
    <input type="text" name="colour" />
    <input type="submit" value="Submit" />
</form>

当我尝试对此路线进行测试时,我收到以下错误:

System.Exception : ConfigurableBootstrapper Exception
  ----> Nancy.RequestExecutionException : Oh noes!
  ----> System.MissingMethodException : Method not found: '!!0 Nancy.ModelBinding.ModuleExtensions.Bind(Nancy.INancyModule, System.String[])'.
Result StackTrace:  
at Nancy.Testing.PassThroughStatusCodeHandler.Handle(HttpStatusCode statusCode, NancyContext context)
at Nancy.NancyEngine.CheckStatusCodeHandler(NancyContext context)
at Nancy.NancyEngine.HandleRequest(Request request, Func`2 preRequest)
at Nancy.NancyEngine.HandleRequest(Request request)
at Nancy.Testing.Browser.HandleRequest(String method, String path, Action`1 browserContext)
at Nancy.Testing.Browser.Post(String path, Action`1 browserContext)
at Shopr.Tests.Cars.CarTests.PostNewCarReturnsCar() in c:\Users\*******\Documents\Visual Studio 2012\Projects\Shopr\Shopr.Tests\Cars\CarTests.cs:line 35
--RequestExecutionException
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)
--MissingMethodException
at Shopr.Api.Modules.CarsModule.<.ctor>b__3(Object args)
at Nancy.Routing.Route.Invoke(DynamicDictionary parameters)
at Nancy.Routing.DefaultRouteInvoker.Invoke(Route route, DynamicDictionary parameters, NancyContext context)
at Nancy.Routing.DefaultRequestDispatcher.Dispatch(NancyContext context)
at Nancy.NancyEngine.InvokeRequestLifeCycle(NancyContext context, IPipelines pipelines)

这是我的测试:

[Test]
public void PostNewCarReturnsCar()
{
    var browser = BrowserFactory.Create();
    var response = browser.Post("/Car/New", with =>
    {
        with.FormValue("Colour", "Red");
    });

    var car = GetObjectFromJsonBody(response.Body.AsString());

    Assert.IsNotNull(car);
    Assert.AreEqual(2, car.Id);
}

这是我的测试引导程序:

public class NancyBootstrapper : ConfigurableBootstrapper
{
    public NancyBootstrapper()
        : base(with => { with.Module<CarsModule>(); })
    { }

    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        container.Register<ICarRepository>(new FakeData.CarRepository());
    }
}

我是否必须在我的 ConfigurableBootstrapper 中执行任何特殊操作才能使绑定起作用?

【问题讨论】:

  • 如果您得到一个缺少异常的方法,或者您没有引用具有 Car 类型的程序集,听起来您有一个旧的 DLL 正在运行?
  • 清理了所有的 bin/obj 文件夹,重建,还是一样。我的测试项目和 nancy web 项目都引用了其中包含 Car 类型的 Core 项目。另一个测试只是测试 Get[/Car/{carid}] 工作正常。奇数。
  • 检查您的 packages.config 以确保其拉取正确的版本?

标签: unit-testing nancy


【解决方案1】:

仔细检查您的 packages.config 是否提取了正确的版本。

更新:因为这主要来自@StevenRobbins,所以我表扬他:

【讨论】:

    【解决方案2】:

    @Jon 检查 packages.config 的建议是正确的。尽管使用相同的方法在几分钟内添加了软件包,但测试项目的 Nancy 版本比 Web 项目的版本旧。更新到正确的版本,现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多